/**
 * 
 */
package com.lurencun.android.support.ui;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

/**
 * 带回退到上一个Activity功能的封装Activity。
 * @author cfuture.chenyoca [桥下一粒砂] (chenyoca@163.com)
 * @date 2012-1-13
 */
public abstract class BackUIActivity extends BaseActivity{

	private static final String DEFAULT_TIP_TITLE = "返回提示";
	private static final String DEFAULT_TIP_MESSAGE = "您确定返回吗？";
	private static final String DEFAULT_OK_TEXT = "确定";
	private static final String DEFAULT_CANCLE_TEXT = "取消";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		hideTitleBar();
		setContentView(getContentViewLayoutId());
		bindBackAction();
		onCreateEx(savedInstanceState);
	}
	
	/**
	 * 当需要在Activity的OnCreate中执行操作里，
	 * 在此方法中执行。
	 * @param savedInstanceState
	 */
	protected abstract void onCreateEx(Bundle savedInstanceState);
	/**
	 * 设置当前Activity布局的View的资源ID
	 * @return 布局资源ID，例如：R.layout.XXX
	 */
	protected abstract int getContentViewLayoutId();
	
	/**
	 * 返回当前Activity回退按钮的按钮ID
	 * @return 回退按钮的ID，例如：R.id.XXX
	 */
	protected abstract int getBackButtonResId();
	
	/**
	 * 绑定回退按钮的操作动作
	 */
	private void bindBackAction(){
		findViewById(getBackButtonResId()).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isConfirmBack()){
					showTip();
				}else{
					BackUIActivity.this.finish();
					overridePendingTransition(BackUIActivity.this);
					//BackUIActivity.this.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
				}
			}
		});
	}
	
	/**
	 * Activity切换动画设置，需要在2.0版本之后才有。
	 * 本SDK最低支持1.6版本。如果需要Activity切换动画
	 * 请覆盖此方法。
	 * @param activity
	 */
	protected void overridePendingTransition(Activity activity){
//		activity.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
	}
	
	/**
	 * 是否显示返回确认消息。
	 * @return true则显示返回确认，否则直接返回不需要提示。
	 */
	protected abstract boolean isConfirmBack();
	
	/**
	 * 显示退出提示框
	 */
	protected final void showTip(){
		final AlertDialog alertDialog = new AlertDialog.Builder(BackUIActivity.this)
			.setTitle(getTipTitle()).setMessage(getTipMessage())
			.setPositiveButton(DEFAULT_OK_TEXT, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which){
					BackUIActivity.this.finish();
				}
			}).setNegativeButton(DEFAULT_CANCLE_TEXT,new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which){
					return;
				}
			}).create();
		alertDialog.show();
	}
	
	/**
	 * 返回提示消息的标题字符串资源ID
	 * @return 资源ID
	 */
	protected String getTipTitle(){
		return DEFAULT_TIP_TITLE;
	}
	
	/**
	 * 返回提示消息的提示内容字符串资源ID
	 * @return 资源ID
	 */
	protected String getTipMessage(){
		return DEFAULT_TIP_MESSAGE;
	}

}
